package org.example.managementsystem.service;

import org.example.managementsystem.model.Product;
import org.example.managementsystem.repository.ProductDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 产品服务层
 */
@Service
public class ProductService {
    private final ProductDao productDao;

    @Autowired
    public ProductService(ProductDao productDao) {
        this.productDao = productDao;
    }

    /**
     * 添加产品
     */
    public Long addProduct(Product product) {
        // 确保产品身份码为空，以便后续自动生成
        product.setProductCode(null);
        
        // 先插入获取ID
        Long id = productDao.insertProduct(product);
        
        // 根据车间和ID生成产品身份码
        String workshopAbbr = getWorkshopAbbr(product.getWorkshop());
        String productCode = workshopAbbr + id;
        
        // 更新产品身份码
        productDao.updateProductCode(id, productCode);
        
        return id;
    }

    /**
     * 获取车间缩写
     */
    private String getWorkshopAbbr(String workshop) {
        switch (workshop) {
            case "表面处理车间": return "BM";
            case "锻压车间": return "DY";
            case "组装车间": return "ZZ";
            case "质检车间": return "ZJ";
            case "机加车间": return "JJ";
            default: return "QT"; // 其他情况
        }
    }

    /**
     * 批量更新空产品身份码
     */
    public int batchUpdateEmptyProductCodes() {
        return productDao.batchUpdateEmptyProductCodes();
    }

    /**
     * 更新产品
     */
    public boolean updateProduct(Product product) {
        // 如果产品身份码为空，获取原有产品信息的产品身份码
        if (product.getProductCode() == null || product.getProductCode().isEmpty()) {
            Product existingProduct = productDao.getProductById(product.getId());
            if (existingProduct != null) {
                product.setProductCode(existingProduct.getProductCode());
            } else {
                // 如果找不到原有产品，根据车间生成新产品身份码
                String workshopAbbr = getWorkshopAbbr(product.getWorkshop());
                String productCode = workshopAbbr + product.getId();
                product.setProductCode(productCode);
            }
        }
        return productDao.updateProduct(product) > 0;
    }

    /**
     * 删除产品
     */
    public boolean deleteProduct(Long id) {
        return productDao.deleteProduct(id) > 0;
    }

    /**
     * 根据ID查询产品
     */
    public Product getProductById(Long id) {
        return productDao.getProductById(id);
    }

    /**
     * 查询所有产品
     */
    public List<Product> getAllProducts() {
        return productDao.getAllProducts();
    }

    /**
     * 搜索产品
     */
    public List<Product> searchProducts(String keyword) {
        return productDao.searchProducts(keyword);
    }
}